iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Software Development

我們與Maven的距離系列 第 17

Day16 - Project Aggregation

  • 分享至 

  • xImage
  •  

前言

前一天介紹了繼承的觀念,透過繼承的觀念我們可以將模組的共同使用的dependency抽到父層的pom進行統一管理,同樣的也可以對plugin一致性的進行管理,或是設置共用的參數供子模組使用,但是這樣我們是不是可以透過父層的pom對整體專案進行整體的構建呢,只要我們再進行設置聚合就可以達到

什麼是 Maven 聚合 (Project Aggregation)

Maven 聚合是一種讓父專案中執行一個命令,就同時對所有子模組進行構建的動作,可以透過在父層pom.xml設定<modules>讓其了解一整包專案的架構,它能夠自動識別模組間的關係,讓構建的時候能一鍵完成

Maven聚合範例演示

延續前一日的範例,可以看到其實專案在我們設定好父層pom.xml的<package>為pom後,針對我們後續增加的project對子模組pom加入了<parent>,同時也對父層pom加入了<modules>
https://ithelp.ithome.com.tw/upload/images/20251001/20128084jFdz2hggj3.png

測試打包

透過mvn package一鍵完成所有模組的構建
https://ithelp.ithome.com.tw/upload/images/20251001/20128084QE3cYbeJdr.png

module dependency

當然一般專案沒有那麼單純,我們來設定一下模組之間的相依來看看它是否能夠正常構建,設定模組依賴如下:

  • web -> service
  • servive -> core
  • core -> infrastructure

<!-- web module add dependency -->
<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>service</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

<!-- service module add dependency -->
<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>core</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

<!-- core module add dependency -->
<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>infrastructure</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

執行 mvn package 後,您會發現 Maven 能夠正確構建整個專案!這是因為 Maven 的 Reactor 機制在背後分析模組間的依賴關係,並自動按正確順序進行構建:
構建順序:infrastructure → core → service → web
你會在構建時發現Reactor Build Order
https://ithelp.ithome.com.tw/upload/images/20251001/20128084EOX6cSpaSV.png
構建結果
https://ithelp.ithome.com.tw/upload/images/20251001/20128084UsQ7kRIzVa.png

針對單一模組打包的兩種方式

假設你只想打包core模組該可以使用以下兩種方式

  1. 相關依賴模組一起打包
    如果是針對單一模組打包可以下mvn clean package -pl core -am,-pl是指projece,-am是指--also-make,可以由‵mvn -h‵查看詳細說明
    https://ithelp.ithome.com.tw/upload/images/20251001/20128084voDo8MtYTd.png

  2. 先安裝相依模組到local repository
    先在父層pom資料夾下執行mvn install,將專案安裝置loca repository

mvn clean install

會在本地倉庫看到相關的套件
https://ithelp.ithome.com.tw/upload/images/20251001/201280847RYlAXLho8.png

mvn clean package -pl core

看到package成功訊息
https://ithelp.ithome.com.tw/upload/images/20251001/20128084OUDJFyQLzB.png

小結

今天我們深入探討了 Maven 聚合機制,透過,Maven Reactor 自動分析模組依賴關係,能夠按正確順序構建模組。當然maven繼承可以獨立存在而沒有聚合,但因為一鍵完成構建的好處,往往兩者會伴隨出現。

Reference


上一篇
Day 15 - Project Inheritance
下一篇
Day17 - BOM (Bill of Materials)
系列文
我們與Maven的距離24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言